/*
 * Copyright (c) 2005, 2014 vacoor
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package org.vacoor.nothing.web.domain;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;

/**
 * 分页结果
 * <p/>
 * 参考 Spring Data Commons
 *
 * @param <E> 结果元素类型
 * @author Vacoor
 */
public interface Page<E> extends Iterable<E>, Serializable {

    /**
     * 当前页码
     */
    int getPage();

    /**
     * 页面大小
     */
    int getPageSize();

    /**
     * 获取排序
     */
    Sort getSort();

    /**
     * 总页数
     */
    int getTotalPages();

    /**
     * 总记录数
     */
    int getRecordCount();

    /**
     * 是否有前一页
     */
    boolean hasPreviousPage();

    /**
     * 是否有后一页
     */
    boolean hasNextPage();

    /**
     * 是否是第一页
     */
    boolean isFirstPage();

    /**
     * 是否是最后一页
     */
    boolean isLastPage();

    /**
     * 获取当前分页的数据
     */
    List<E> getData();

    /**
     * 获取结果迭代器
     */
    @Override
    Iterator<E> iterator();

    /**
     * 获取上一页的分页对象, 如果不存在返回 null
     * 某些地方需要用到,eg: 需要分页取数据
     */
    Pageable nextPageable();

    /**
     * 获取下一页的分页对象, 如果不存在返回 null
     */
    Pageable previousPageable();

}
